package com.vr.xxaiagent.rag;

import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.pgvector.PgVectorStore;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

/**
 * postGreSql 向量存储配置,与mysql有冲突，mysql所有配置和依赖再使用
 *
 * @author hzh
 * @date 2025/06/04
 */
// @Configuration
public class PgVectorStoreConfig {
    // @Resource
    private LoveAppDocumentLoader loveAppDocumentLoader;

    // @Bean
    public VectorStore pgVectorVectorStore(JdbcTemplate jdbcTemplate, EmbeddingModel dashscopeEmbeddingModel) {
        PgVectorStore pgVectorStore = PgVectorStore.builder(jdbcTemplate, dashscopeEmbeddingModel)
                // 设置向量维度为1536，与使用的嵌入模型输出匹配
                .dimensions(1536)
                // 使用余弦距离作为相似度计算方式
                .distanceType(PgVectorStore.PgDistanceType.COSINE_DISTANCE)
                // 使用HNSW（Hierarchical Navigable Small World）索引类型以加速最近邻搜索
                .indexType(PgVectorStore.PgIndexType.HNSW)
                // 启动时自动初始化数据库模式
                .initializeSchema(true)
                // 指定向量数据存储在PostgreSQL的"public"模式下
                .schemaName("public")
                // 设置向量存储的表名为"vector_store"
                .vectorTableName("vector_store")
                // 设置每次批量处理的最大文档数量为1000
                .maxDocumentBatchSize(1000)
                // 构建并返回PgVectorStore实例
                .build();
        List<Document> documents = loveAppDocumentLoader.loadMarkdowns();
        pgVectorStore.add(documents);
        return pgVectorStore;
    }
}
